//
//	MiscPathFieldInspector.m -- IB inspector of MiscPathField
//		Written and Copyright (c) 1995 by Balazs Pataki. 
//				Version 1.0.  All rights reserved.
//
//		This notice may not be removed from this source code.
//
//	This object is included in the MiscKit by permission from the author
//	and its use is governed by the MiscKit license, found in the file
//	"LICENSE.rtf" in the MiscKit distribution.  Please refer to that file
//	for a list of all applicable permissions and restrictions.
//	

// Most of the code in this inspector is borrowed form  Mike Ferris's 
// MORegexTextCellInspector of MOKit
// Mike Ferris, Copyright 1993, all rights reserved.

#import "MiscPathFieldInspector.h"
#import "MiscClipText.subproj/MiscPathField.h"
#import <objc/objc-runtime.h>

#define CLASS_VERSION	0
#define CLASS_NAME		"MiscPathFieldInspector"


#define BG_NONE_TAG		0
#define BG_BLACK_TAG	1
#define BG_DKGRAY_TAG	2
#define BG_LTGRAY_TAG	3
#define BG_WHITE_TAG	4

#define TG_BLACK_TAG	0
#define TG_DKGRAY_TAG	1
#define TG_LTGRAY_TAG	2
#define TG_WHITE_TAG	3

#define ALIGN_LEFT_TAG		0
#define ALIGN_CENTER_TAG	1
#define ALIGN_RIGHT_TAG		2

#define BORDER_NONE_TAG		0
#define BORDER_LINE_TAG		1
#define BORDER_BEZEL_TAG	2


#define NIB_TYPE							"nib"
#define NIB_NAME							"MiscPathFieldInspector"


@implementation MiscPathFieldInspector

+ initialize
// Set the version.
{
	if (self == objc_lookUpClass(CLASS_NAME))  {
		[self setVersion:CLASS_VERSION];
	}
	return self;
}

- init
// Load our nib file.
{
	char buf[MAXPATHLEN+1];
	id bundle;
	
	[super init];
	
	// load our nib file.
	bundle = [NXBundle bundleForClass:[self class]];
	[bundle getPath:buf forResource:NIB_NAME ofType:NIB_TYPE];
	[NXApp loadNibFile:buf owner:self withNames:NO fromZone:[self zone]];
	
	return self;
}

- ok:sender
// set the text field-ish stuff and the allowEmptyString attribute.  
// The patternButtonAction takes care of the regex stuff.  The 
// optionCheckboxAction takes care of editable, selectable, scrollable.
{
	int bgTag = [backgroundGrayMatrix selectedTag];
	int tgTag = [textGrayMatrix selectedTag];
	int alTag = [alignmentMatrix selectedTag];
	int boTag = [borderMatrix selectedTag];
		
	if (bgTag == BG_NONE_TAG)  {
		[object setBackgroundGray:-1.0];
	}  else if (bgTag == BG_BLACK_TAG)  {
		[object setBackgroundGray:NX_BLACK];
	}  else if (bgTag == BG_DKGRAY_TAG)  {
		[object setBackgroundGray:NX_DKGRAY];
	}  else if (bgTag == BG_LTGRAY_TAG)  {
		[object setBackgroundGray:NX_LTGRAY];
	}  else  {
		[object setBackgroundGray:NX_WHITE];
	}
	if (tgTag == TG_BLACK_TAG)  {
		[object setTextGray:NX_BLACK];
	}  else if (tgTag == TG_DKGRAY_TAG)  {
		[object setTextGray:NX_DKGRAY];
	}  else if (tgTag == TG_LTGRAY_TAG)  {
		[object setTextGray:NX_LTGRAY];
	}  else  {
		[object setTextGray:NX_WHITE];
	}
	if (alTag == ALIGN_LEFT_TAG)  {
		[object setAlignment:NX_LEFTALIGNED];
	}  else if (alTag == ALIGN_CENTER_TAG)  {
		[object setAlignment:NX_CENTERED];
	}  else  {
		[object setAlignment:NX_RIGHTALIGNED];
	}
	if (boTag == BORDER_NONE_TAG)  {
		[object setBordered:NO];
		[object setBezeled:NO];
	}  else if (boTag == BORDER_LINE_TAG)  {
		[object setBordered:YES];
	}  else  {
		[object setBezeled:YES];
	}

	[object setTag:[tagForm intValueAt:0]];

	// My settings
	[object setReplaceHomeWithTilde:[replaceHomeButton state]];

	return [super ok:sender];
}

- revert:sender
// fill in the inspector with the attributes of "object"
{	
	float bg = [object backgroundGray], tg = [object textGray];
	int alignment = [object alignment];
	BOOL isBordered = [object isBordered], isBezeled = [object isBezeled];
	
	if (bg < 0)  {
		[backgroundGrayMatrix selectCellAt:0:BG_NONE_TAG];
	}  else  if ((bg >= 0) && (bg < .2))  {
		[backgroundGrayMatrix selectCellAt:0:BG_BLACK_TAG];
	}  else  if ((bg >= .2) && (bg < .45))  {
		[backgroundGrayMatrix selectCellAt:0:BG_DKGRAY_TAG];
	}  else  if ((bg >= .45) && (bg < .8))  {
		[backgroundGrayMatrix selectCellAt:0:BG_LTGRAY_TAG];
	}  else  if (bg >= .8)  {
		[backgroundGrayMatrix selectCellAt:0:BG_WHITE_TAG];
	}
	[backgroundGrayMatrix display];
	if (tg < .2)  {
		[textGrayMatrix selectCellAt:0:TG_BLACK_TAG];
	}  else  if ((tg >= .2) && (tg < .45))  {
		[textGrayMatrix selectCellAt:0:TG_DKGRAY_TAG];
	}  else  if ((tg >= .45) && (tg < .8))  {
		[textGrayMatrix selectCellAt:0:TG_LTGRAY_TAG];
	}  else  if (tg >= .8)  {
		[textGrayMatrix selectCellAt:0:TG_WHITE_TAG];
	}
	[textGrayMatrix display];
	if (alignment == NX_LEFTALIGNED)  {
		[alignmentMatrix selectCellAt:0:ALIGN_LEFT_TAG];
	}  else if (alignment == NX_CENTERED)  {
		[alignmentMatrix selectCellAt:0:ALIGN_CENTER_TAG];
	}  else  {
		[alignmentMatrix selectCellAt:0:ALIGN_RIGHT_TAG];
	}
	[alignmentMatrix display];
	if (isBezeled)  {
		[borderMatrix selectCellAt:0:BORDER_BEZEL_TAG];
	}  else if (isBordered)  {
		[borderMatrix selectCellAt:0:BORDER_LINE_TAG];
	}  else  {
		[borderMatrix selectCellAt:0:BORDER_NONE_TAG];
	}

	[tagForm setIntValue:[object tag] at:0];
	
	// My settings
	[replaceHomeButton setState:[object doesReplacesHomeWithTilde]];

	return [super revert:sender];
}

- (BOOL)wantsButtons
// Our inspector does not have OK or Revert buttons.
{
	return NO;
}


@end